// ============================================================ // ARO Index Worker v2 // Updated: March 19, 2026 // Changes from previous version: // - [March 19] Table column fonts -> Nunito Sans (biz-name, // biz-domain, index-pill, aro-score, models-val) // - [March 19] Audits Run = total count, no environment filter // ============================================================ const SUBINDUSTRY_THRESHOLD = 10; const STRIPE_ACTION_PLAN = 'https://buy.stripe.com/cNi5kEdRJ6Bias54zV3sI04'; const AUDIT_URL = 'https://aroindex.com/audit'; const CONTACT_URL = 'https://aroindex.com/agency'; const LOGO_URL = 'https://tagmakessc.com/wp-content/uploads/2025/10/610a1f8f-fa76-41e4-b173-fe0c5c6611c0.webp'; const PROXY_URL = 'https://tagmakes-proxy.tagmakes.workers.dev'; const PAGES_URL = 'https://aroindex-platform.pages.dev'; const PAGES_PATHS = ['audit','pricing','agency','partners','dashboard','fixes','report','privacy','terms','admin']; function buildHamburgerNav(activePath) { const links = [ { label: 'ARO Index', href: 'https://aroindex.com', path: '/' }, { label: 'Free Audit', href: 'https://aroindex.com/audit', path: '/audit' }, { label: 'Pricing', href: 'https://aroindex.com/pricing', path: '/pricing' }, { label: 'For Agencies', href: 'https://aroindex.com/agency', path: '/agency' }, { label: 'Affiliate Program', href: 'https://aroindex.com/partners', path: '/partners' }, ]; let navLinks = ''; links.forEach(function(l) { const isActive = activePath === l.path; navLinks += '' + l.label + ''; }); return '' + '
' + '
' + 'ARO Index' + '' + '
' + navLinks + '
' + ''; } export default { async fetch(request, env) { const url = new URL(request.url); const pathParts = url.pathname.split('/').filter(Boolean); // Redirect /partner -> /partners if (pathParts[0] === 'partner' && pathParts.length === 1) { return Response.redirect(url.origin + '/partners', 301); } // Proxy Pages paths to Cloudflare Pages const firstSegment = pathParts[0] || ''; if (PAGES_PATHS.includes(firstSegment)) { const pagesRes = await fetch(PAGES_URL + url.pathname + url.search, { method: request.method, headers: request.headers, }); const respHeaders = new Headers(pagesRes.headers); respHeaders.delete('x-frame-options'); return new Response(pagesRes.body, { status: pagesRes.status, headers: respHeaders }); } const marketSlug = pathParts[0] || null; const isLanding = !marketSlug; const codeParam = url.searchParams.get('agency') || ''; if (pathParts[0] === 'badge-request' && request.method === 'POST') { return handleBadgeRequest(request, env); } let agencyCode = ''; if (codeParam) { const upper = codeParam.toUpperCase(); try { const kvRes = await fetch( PROXY_URL + '/admin/validate-code?code=' + encodeURIComponent(upper), { headers: { 'x-internal-secret': env.INTERNAL_SECRET || '' } } ); if (kvRes.ok) { const kvData = await kvRes.json(); if (kvData.valid) agencyCode = upper; } } catch(e) {} } try { const [allMarketsRes, auditCountRes] = await Promise.all([ fetch( env.SUPABASE_URL + '/rest/v1/category_market_counts?select=market_slug&order=market_slug&limit=5000', { headers: supaHeaders(env) } ), // Total audit count — ALL environments, anon key with count=exact fetch( env.SUPABASE_URL + '/rest/v1/audits?select=id&limit=1', { headers: { 'apikey': env.SUPABASE_ANON_KEY, 'Authorization': 'Bearer ' + env.SUPABASE_ANON_KEY, 'Prefer': 'count=exact' } } ) ]); const marketsRaw = await allMarketsRes.json(); const contentRange = auditCountRes.headers.get('Content-Range') || ''; const auditCount = contentRange.includes('/') ? (parseInt(contentRange.split('/')[1]) || 0) : 0; if (!Array.isArray(marketsRaw)) { return errorPage('Database connection failed. Please try again shortly.'); } const markets = [...new Map(marketsRaw.map(m => [m.market_slug, { market_slug: m.market_slug, market_name: m.market_slug.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ') }])).values()] .filter(function(m) { return m.market_slug && m.market_slug !== 'unknown'; }); if (isLanding) { return new Response( renderLandingPage({ markets, auditCount }), { headers: { 'Content-Type': 'text/html; charset=utf-8' } } ); } const marketRes = await fetch( env.SUPABASE_URL + '/rest/v1/leaderboard_display?market_slug=eq.' + marketSlug + '&order=rank.asc&limit=5000', { headers: supaHeaders(env) } ); const businesses = await marketRes.json(); if (!Array.isArray(businesses)) { return errorPage('Database connection failed. Please try again shortly.'); } const marketName = (businesses[0] && businesses[0].market_name) ? businesses[0].market_name : marketSlug; const industryMap = buildIndustryMap(businesses); return new Response( renderPage({ marketName, marketSlug, industryMap, markets, agencyCode, auditCount }), { headers: { 'Content-Type': 'text/html; charset=utf-8' } } ); } catch(err) { return errorPage('Something went wrong: ' + err.message); } } }; async function handleBadgeRequest(request, env) { let body = {}; try { body = await request.json(); } catch(e) { return jsonResponse({ error: 'Invalid JSON' }, 400); } const email = (body.email || '').trim().toLowerCase(); const domain = (body.domain || '').trim(); const bizName = (body.business_name || '').trim(); const category = (body.category || '').trim(); const score = body.aro_score || null; if (!email || !domain) return jsonResponse({ error: 'email and domain required' }, 400); try { const darkSnippet = 'Top 10 ARO Index'; const lightSnippet = 'Top 10 ARO Index'; const html = buildBadgeEmail({ bizName, category, score, domain, darkSnippet, lightSnippet }); const resendRes = await fetch('https://api.resend.com/emails', { method: 'POST', headers: { 'Authorization': 'Bearer ' + env.RESEND_KEY, 'Content-Type': 'application/json' }, body: JSON.stringify({ from: 'TaG Makes ', to: email, subject: (bizName || domain) + ' made the ARO Index Top 10', html }) }); if (!resendRes.ok) { const err = await resendRes.text(); return jsonResponse({ error: 'Email failed: ' + err }, 500); } if (env.SUPABASE_URL && env.SUPABASE_ANON_KEY) { try { await fetch( env.SUPABASE_URL + '/rest/v1/projects?domain=eq.' + encodeURIComponent(domain), { method: 'PATCH', headers: { ...supaHeaders(env), 'Prefer': 'return=minimal' }, body: JSON.stringify({ contact_email: email, badge_email_sent: true, badge_email_status: 'sent', badge_email_sent_at: new Date().toISOString(), top10_notification_sent: true }) } ); } catch(e) {} } return jsonResponse({ ok: true }); } catch(e) { return jsonResponse({ error: e.message }, 500); } } function jsonResponse(body, status) { return new Response(JSON.stringify(body), { status: status || 200, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' } }); } function supaHeaders(env) { return { 'apikey': env.SUPABASE_ANON_KEY, 'Authorization': 'Bearer ' + env.SUPABASE_ANON_KEY, 'Content-Type': 'application/json' }; } function buildIndustryMap(businesses) { const INDUSTRY_MIN = 10; const raw = {}; businesses.forEach(function(b) { const domain = (b.primary_domain || '').toLowerCase(); if (domain.includes('tagmakessc') || domain.includes('tagmakes')) return; const industry = b.service_category || 'Other'; const sub = b.subindustry || null; if (!raw[industry]) raw[industry] = { businesses: [], subindustries: {} }; raw[industry].businesses.push(b); if (sub) { if (!raw[industry].subindustries[sub]) raw[industry].subindustries[sub] = []; raw[industry].subindustries[sub].push(b); } }); const map = {}; Object.keys(raw).forEach(function(ind) { if (raw[ind].businesses.length >= INDUSTRY_MIN) map[ind] = raw[ind]; }); return map; } function errorPage(msg) { return new Response( 'ARO Index' + '' + '

ARO Index

' + msg + '

' + '', { headers: { 'Content-Type': 'text/html' } } ); } function esc(str) { return String(str) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"'); } function buildBadgeEmail({ bizName, category, score, domain, darkSnippet, lightSnippet }) { return '' + '' + '
' + '' + '' + '' + '' + '
' + 'ARO™ Index' + 'Top 10 Badge' + '
' + '

You made the list

' + '

' + esc(bizName || domain) + ' ranks in the Top 10 for ' + esc(category) + ' on the ARO Index.

' + (score ? '

Your ARO Score of ' + score + ' puts you in the top tier of AI-recommended businesses in your category.

' : '') + '

Two badge options below. Pick whichever fits your site and paste the code anywhere.

' + '

Dark version

' + '
' + darkSnippet + '
' + '
' + esc(darkSnippet) + '
' + '

Light version

' + '
' + lightSnippet + '
' + '
' + esc(lightSnippet) + '
' + '

Questions? Reply here or reach me at therese@tagmakessc.com.

' + '
' + '

Therese Grittner · TaG Makes · Charleston, SC · tagmakessc.com

' + '
'; } function renderLandingPage(opts) { const markets = opts.markets; let marketPills = ''; markets.forEach(function(m) { marketPills += '' + esc(m.market_name) + ''; }); let cityLinks = ''; markets.forEach(function(m) { cityLinks += '' + esc(m.market_name) + ''; }); return '\n\n\n' + '\n' + '\n' + '\n' + 'ARO Index | AI Recommendation Rankings by Market\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n\n' + buildHamburgerNav('/') + '
ARO Index™
aroindex.com
\n' + '
\n' + '
\n' + '
AI Recommendation Rankings
\n' + '

Which businesses is
AI recommending?

\n' + '

Real audit data tracking which businesses AI platforms actually recommend, by market and industry. Built from live queries across ChatGPT, Claude, Gemini, and Perplexity.

\n' + '
\n' + // Cities section '
\n' + '
Live ARO Index data - new cities added weekly
\n' + '
' + cityLinks + '
\n' + '
\n' + // Industry ticker '
\n' + '
Industries tracked - new markets added weekly
\n' + '
\n' + '
\n' + 'Restaurants' + 'Real Estate' + 'Hotels' + 'Legal Services' + 'Home Services' + 'Healthcare' + 'Financial Services' + 'Auto Dealers' + 'Fitness' + 'Wedding Services' + 'Insurance' + 'Pet Services' + 'Restaurants' + 'Real Estate' + 'Hotels' + 'Legal Services' + 'Home Services' + 'Healthcare' + '
\n
\n
\n' + '
\n' + '
\n' + '
For business owners
\n' + '

Find out if AI is recommending you

\n' + '

Free audit across ChatGPT, Claude, Gemini, and Perplexity. See your score in 60 seconds.

\n' + 'Run my free audit\n' + '
\n' + '
\n' + '
For agencies
\n' + '

White-label AI recommendation data your clients think you built

\n' + '

Give every client a competitive ranking they can\'t get anywhere else. Your brand. Your margin. Our data.

\n' + 'See how it works\n' + '
\n' + '
\n' + '
\n' + '

What the ARO™ Index actually is

\n' + '

When someone asks an AI platform to recommend a business, most are invisible. The ARO Index measures who shows up and why.

\n' + '

Built from live audits across ChatGPT, Claude, Gemini, and Perplexity. Scored using the ARO Score™ methodology. Ranked by how consistently and confidently AI platforms recommend each business.

\n' + '

This is research data. Rankings reflect current AI recommendation patterns and update as new audits run.

\n' + '
\n' + '
\n' + '
ARO Score

Measures how well a single website is structured to be recommended by AI. Entity clarity, schema markup, topical authority. A diagnostic score.

\n' + '
ARO Index Score

Measures a business competitively within its category. Weighted by recommendation rate, model agreement, and audit recency.

\n' + '
AIs Agree

How many AI platforms recommended this business for the tested query. Agreement across more platforms means a stronger, more reliable ranking.

\n' + '
Why rankings change

AI models update regularly. A business that was invisible six months ago can rank highly today after optimizing for AI recommendation signals.

\n' + '
\n' + '
\n' + '\n' + // Glitch modal '
' + '
' + '
ARO Index
' + '
Loading
' + '
analyzing . . .
' + '
\n' + '\n' + '\n'; } function renderPage(opts) { const marketName = opts.marketName; const marketSlug = opts.marketSlug; const industryMap = opts.industryMap; const markets = opts.markets; const agencyCode = opts.agencyCode; const auditCount = opts.auditCount || 0; const industries = Object.keys(industryMap).sort(); const totalBusinesses = Object.values(industryMap).reduce(function(a, i) { return a + i.businesses.length; }, 0); const totalCategories = industries.length; const allDataJson = JSON.stringify( industries.reduce(function(acc, ind) { acc[ind] = industryMap[ind].businesses; return acc; }, {}) ); const subDataJson = JSON.stringify( industries.reduce(function(acc, ind) { acc[ind] = industryMap[ind].subindustries; return acc; }, {}) ); const marketNameJs = marketName.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\r?\n/g, ' '); const marketNameLowerJs = marketName.toLowerCase().replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\r?\n/g, ' '); const agencyCodeJs = agencyCode.replace(/'/g, "\\'"); const agencyUnlockedBool = agencyCode ? 'true' : 'false'; const schemaDate = new Date().toISOString().split('T')[0]; let marketPills = ''; markets.forEach(function(m) { const active = m.market_slug === marketSlug ? ' active' : ''; marketPills += '' + esc(m.market_name) + ''; }); let agencyCatOptions = ''; industries.forEach(function(ind) { agencyCatOptions += ''; }); const faqs = [ ['What is the ARO Index?', 'The ARO Index is a ranked dataset of businesses scored on how consistently and confidently AI platforms recommend them. It measures recommendation rate across major AI platforms, model agreement, score strength, and audit recency -- then weights them into a single Index Score. Think of it like a credit bureau for AI recommendations. Your score reflects how the machines see you, not how you see yourself.'], ['What is an ARO Score?', 'The ARO Score measures how well a single website is structured to be recommended by AI platforms. It evaluates entity clarity, topical authority, schema markup, content structure, and crawlability -- the signals AI uses to decide who to recommend. A high ARO Score means the machines understand you. A low score means they are guessing, and when AI guesses, it recommends someone else.'], ['Why does my Index Score differ from my ARO Score?', 'Your ARO Score measures your site in isolation. Your Index Score measures you against every other business in your category. A business recommended by all AI models ranks higher than one with a better raw score but fewer model recommendations. The Index Score is competitive. The ARO Score is diagnostic.'], ['How often are rankings updated?', 'Rankings update in real time as new audits complete. Every audit run adds to the dataset. The more businesses audited in a category, the more accurate and competitive the index becomes. Early movers have a significant advantage -- they set the benchmark everyone else is measured against.'], ['Why might a business rank well on Google but score low in AI?', 'Google rewards links, keywords, and click signals. AI platforms reward clarity, entity recognition, and structured data. A business can rank on page one of Google and be completely invisible inside AI recommendations -- because the signals are fundamentally different.'], ['How is the Index Score calculated?', 'The Index Score combines three weighted factors: ARO Score (70%), AI model recommendation rate (20%), and audit recency (10%). A business audited recently and recommended by all AI models will outrank one with a higher raw score but older data.'], ['How can agencies use this data?', 'The ARO Index gives agencies a real competitive benchmark to show clients -- not vanity metrics, but actual AI recommendation data. Agency access unlocks query-level detail, client filtering, and audit history. Enter your access code above or get in touch to learn about agency partnerships.'] ]; let faqHtml = ''; faqs.forEach(function(item, i) { faqHtml += '
'; faqHtml += ''; faqHtml += '
' + item[1] + '
'; faqHtml += '
'; }); const schemaFaqEntities = faqs.map(function(item) { return '{"@type":"Question","name":' + JSON.stringify(item[0]) + ',"acceptedAnswer":{"@type":"Answer","text":' + JSON.stringify(item[1]) + '}}'; }).join(','); const schemaJson = '{"@context":"https://schema.org","@graph":[' + '{"@type":"Dataset","name":' + JSON.stringify('ARO Index - ' + marketName) + ',' + '"description":' + JSON.stringify('AI recommendation rankings for ' + marketName + ' businesses across ChatGPT, Claude, Gemini, and Perplexity. Powered by ARO Score methodology by TaG Makes.') + ',' + '"url":"https://aroindex.com/' + esc(marketSlug) + '",' + '"creator":{"@type":"Organization","name":"TaG Makes","url":"https://tagmakessc.com"},' + '"dateModified":"' + schemaDate + '"},' + '{"@type":"Organization","name":"TaG Makes","url":"https://tagmakessc.com",' + '"founder":{"@type":"Person","name":"Therese Grittner"},' + '"description":"Creators of the ARO Score methodology. AI Recommendation Optimization consultancy based in Charleston, SC."},' + '{"@type":"FAQPage","mainEntity":[' + schemaFaqEntities + ']}]}'; const inlineJs = [ '(function(){', 'var allData=' + allDataJson + ';', 'var subData=' + subDataJson + ';', 'var activeIndustry=null;', 'var activeSubindustry=null;', 'var agencyUnlocked=' + agencyUnlockedBool + ';', 'var currentAgencyCode=\'' + agencyCodeJs + '\';', 'var THRESHOLD=' + SUBINDUSTRY_THRESHOLD + ';', 'var MARKET_NAME=\'' + marketNameJs + '\';', 'var MARKET_NAME_LOWER=\'' + marketNameLowerJs + '\';', 'var AUDIT_URL=\'' + AUDIT_URL + '\';', 'var CONTACT_URL=\'' + CONTACT_URL + '\';', 'var INDEX_URL="https://aroindex.com";', 'var glitchTimer=null;', 'document.querySelectorAll(".stat-cell[data-tip]").forEach(function(cell){', ' cell.addEventListener("mouseenter",function(){', ' var tip=document.createElement("div");tip.className="stat-tip";', ' tip.textContent=cell.getAttribute("data-tip");cell.appendChild(tip);', ' setTimeout(function(){tip.classList.add("visible");},10);', ' });', ' cell.addEventListener("mouseleave",function(){', ' var tip=cell.querySelector(".stat-tip");if(tip)tip.remove();', ' });', '});', 'function showGlitch(label){', ' var modal=document.getElementById("glitch-modal");', ' var labelEl=document.getElementById("glitch-label");', ' labelEl.textContent=label||"Loading";', ' if(glitchTimer){clearTimeout(glitchTimer);glitchTimer=null;}', ' modal.classList.remove("fading");modal.classList.add("visible");', '}', 'function hideGlitch(){', ' var modal=document.getElementById("glitch-modal");', ' modal.classList.add("fading");', ' glitchTimer=setTimeout(function(){modal.classList.remove("visible","fading");},300);', '}', 'var cmdInput=document.getElementById("cmdInput");', 'var cmdDropdown=document.getElementById("cmdDropdown");', 'var cmdActive=document.getElementById("cmdActive");', 'var cmdActiveText=document.getElementById("cmdActiveText");', 'var cmdHlIndex=-1;', 'var industryNames=Object.keys(allData).sort();', 'var industryCounts={};', 'industryNames.forEach(function(n){industryCounts[n]=(allData[n]||[]).length;});', 'function renderCmdDropdown(q){', ' cmdDropdown.innerHTML="";cmdHlIndex=-1;', ' var filtered=industryNames;', ' if(q){var ql=q.toLowerCase();filtered=industryNames.filter(function(n){return n.toLowerCase().indexOf(ql)!==-1;});}', ' if(filtered.length===0){cmdDropdown.innerHTML="
no match
";return;}', ' filtered.forEach(function(n){', ' var div=document.createElement("div");div.className="cmd-dropdown-item";div.dataset.industry=n;', ' div.innerHTML=""+escH(n)+""+(industryCounts[n]||0)+"";', ' div.addEventListener("click",function(){pickIndustry(n);});', ' cmdDropdown.appendChild(div);', ' });', '}', 'function pickIndustry(ind){', ' cmdInput.value="";cmdDropdown.classList.remove("open");cmdInput.blur();', ' cmdActiveText.textContent=ind;cmdActive.classList.add("show");', ' showGlitch(ind);', ' setTimeout(function(){selectIndustry(ind);hideGlitch();},900);', '}', 'cmdInput.addEventListener("focus",function(){renderCmdDropdown("");cmdDropdown.classList.add("open");});', 'cmdInput.addEventListener("input",function(){renderCmdDropdown(cmdInput.value.trim());cmdDropdown.classList.add("open");});', 'cmdInput.addEventListener("keydown",function(e){', ' var items=cmdDropdown.querySelectorAll(".cmd-dropdown-item");', ' if(!items.length)return;', ' if(e.key==="ArrowDown"){e.preventDefault();cmdHlIndex=Math.min(cmdHlIndex+1,items.length-1);updateCmdHl(items);}', ' else if(e.key==="ArrowUp"){e.preventDefault();cmdHlIndex=Math.max(cmdHlIndex-1,0);updateCmdHl(items);}', ' else if(e.key==="Enter"){e.preventDefault();if(cmdHlIndex>=0&&items[cmdHlIndex])pickIndustry(items[cmdHlIndex].dataset.industry);}', ' else if(e.key==="Escape"){cmdDropdown.classList.remove("open");cmdInput.blur();}', '});', 'function updateCmdHl(items){items.forEach(function(el,i){el.classList.toggle("hl",i===cmdHlIndex);});if(cmdHlIndex>=0&&items[cmdHlIndex])items[cmdHlIndex].scrollIntoView({block:"nearest"});}', 'document.addEventListener("click",function(e){if(!document.getElementById("cmdSelect").contains(e.target))cmdDropdown.classList.remove("open");});', 'cmdActive.addEventListener("click",function(){', ' cmdActive.classList.remove("show");activeIndustry=null;activeSubindustry=null;', ' document.getElementById("lbSection").style.display="none";', ' document.getElementById("agencyHook").style.display="none";', ' document.getElementById("howOneLiner").style.display="none";', ' document.getElementById("subPillsWrap").style.display="none";', '});', 'function selectIndustry(ind){', ' activeIndustry=ind;activeSubindustry=null;', ' cmdActiveText.textContent=ind;cmdActive.classList.add("show");', ' renderSubPills(ind);renderTable(ind,null);', ' document.getElementById("lbSection").style.display="block";', ' document.getElementById("agencyHook").style.display="block";', ' document.getElementById("howOneLiner").style.display="block";', ' document.getElementById("lbTitle").textContent="Top AI Recommended - "+ind;', '}', 'function renderSubPills(ind){', ' var subs=subData[ind]||{};', ' var eligible=Object.keys(subs).filter(function(s){return Array.isArray(subs[s])&&subs[s].length>=THRESHOLD;});', ' var wrap=document.getElementById("subPillsWrap");', ' var container=document.getElementById("subPills");', ' container.innerHTML="";', ' if(eligible.length===0){wrap.style.display="none";return;}', ' wrap.style.display="block";', ' var allBtn=document.createElement("button");', ' allBtn.className="pill sub active";allBtn.textContent="All";', ' allBtn.addEventListener("click",function(){showGlitch(ind);setTimeout(function(){selectSub(null);hideGlitch();},900);});', ' container.appendChild(allBtn);', ' eligible.forEach(function(s){', ' var btn=document.createElement("button");', ' btn.className="pill sub";btn.textContent=s;btn.dataset.sub=s;', ' btn.addEventListener("click",function(){showGlitch(s);setTimeout(function(){selectSub(s);hideGlitch();},900);});', ' container.appendChild(btn);', ' });', ' // Sidebar subindustry branch', ' var sideSubs=document.getElementById("sideSubs");', ' if(sideSubs){', ' sideSubs.innerHTML="";', ' if(eligible.length>0){', ' sideSubs.style.display="block";', ' eligible.forEach(function(s){', ' var a=document.createElement("a");', ' a.className="side-nav-sub";', ' a.href="#";', ' a.innerHTML=""+s;', ' a.addEventListener("click",function(e){', ' e.preventDefault();', ' document.querySelectorAll(".side-nav-sub").forEach(function(el){el.classList.remove("active");});', ' a.classList.add("active");', ' selectSub(s);', ' });', ' sideSubs.appendChild(a);', ' });', ' } else {sideSubs.style.display="none";}', ' }', '}', 'function selectSub(sub){', ' activeSubindustry=sub;', ' document.querySelectorAll("#subPills .pill").forEach(function(p){', ' p.classList.toggle("active",(p.dataset.sub||null)===sub);', ' });', ' renderTable(activeIndustry,sub);', '}', 'function renderTable(ind,sub){', ' var sortKey=agencyUnlocked?(document.getElementById("agSortFilter").value||"ranking_score"):"ranking_score";', ' var rows=sub?(subData[ind]&&subData[ind][sub]?subData[ind][sub]:[]):(allData[ind]||[]);', ' rows=rows.slice().sort(function(a,b){', ' if(sortKey==="last_audit_date")return new Date(b.last_audit_date||0)-new Date(a.last_audit_date||0);', ' return(b[sortKey]||0)-(a[sortKey]||0);', ' });', ' var top10=rows.slice(0,10);', ' var tbody=document.getElementById("lbBody");', ' tbody.innerHTML="";', ' if(top10.length===0){', ' var emptyRow=document.createElement("tr");', ' var emptyTd=document.createElement("td");', ' emptyTd.colSpan=agencyUnlocked?6:5;emptyTd.className="empty-state";', ' emptyTd.innerHTML="No rankings yet in "+escH(ind||"")+" "+escH(MARKET_NAME)+". Run a free audit to get added.";', ' emptyRow.appendChild(emptyTd);tbody.appendChild(emptyRow);return;', ' }', ' var labelRow=document.createElement("tr");', ' var labelTd=document.createElement("td");', ' labelTd.colSpan=agencyUnlocked?6:5;labelTd.className="top10-label";', ' labelTd.textContent="Top 10 - "+(sub||ind);', ' labelRow.appendChild(labelTd);tbody.appendChild(labelRow);', ' top10.forEach(function(b,idx){tbody.appendChild(buildRow(b,false,idx===0,ind));});', ' if(window._searchDomain){maybeShowOutsideRow(rows,tbody);}', '}', 'function buildRow(b,highlight,isRankOne,ind){', ' var tr=document.createElement("tr");', ' tr.className="fade-in"+(highlight?" highlighted":"")+(isRankOne?" rank-one-row":"");', ' tr.dataset.domain=b.primary_domain||"";', ' var modRec=typeof b.models_recommending==="number"?b.models_recommending:0;', ' var modTotal=(b.models_total&&typeof b.models_total==="number")?b.models_total:4;', ' var isFull=modRec===modTotal;', ' var bizTd=document.createElement("td");', ' var badgeHtml="";', ' if(isRankOne&&b.rank<=10){', ' badgeHtml="
";', ' badgeHtml+="Do you have your ARO Badge?";', ' badgeHtml+="
";', ' badgeHtml+="";', ' badgeHtml+="";', ' badgeHtml+="
";', ' }', ' bizTd.innerHTML=""+escH(b.business_name||"")+""+escH(b.primary_domain||"")+""+badgeHtml;', ' tr.appendChild(bizTd);', ' var rankTd=document.createElement("td");', ' rankTd.innerHTML=""+(Math.round((b.ranking_score||0)*10)/10)+"";', ' tr.appendChild(rankTd);', ' var aroTd=document.createElement("td");', ' aroTd.innerHTML=""+(b.aro_score||0)+"";', ' tr.appendChild(aroTd);', ' var modelTd=document.createElement("td");', ' modelTd.innerHTML=""+(modRec)+" of "+modTotal+"";', ' tr.appendChild(modelTd);', ' var ctaTd=document.createElement("td");', ' ctaTd.innerHTML="Get your audit";', ' tr.appendChild(ctaTd);', ' if(agencyUnlocked){', ' var queryTd=document.createElement("td");', ' queryTd.innerHTML=""+escH((b.service_category||"").toLowerCase())+" "+escH(MARKET_NAME_LOWER)+"";', ' tr.appendChild(queryTd);', ' }', ' return tr;', '}', 'function handleBadgeYes(){', ' var prompt=document.getElementById("badgePrompt");', ' if(prompt)prompt.innerHTML="Nice. You\'re all set. 🏆";', '}', 'function handleBadgeNo(bizName,domain,category,score){', ' var prompt=document.getElementById("badgePrompt");', ' if(!prompt)return;', ' prompt.innerHTML="
";', ' setTimeout(function(){var el=document.getElementById("badgeEmail");if(el)el.focus();},50);', '}', 'function submitBadge(bizName,domain,category,score){', ' var emailEl=document.getElementById("badgeEmail");', ' if(!emailEl)return;', ' var email=emailEl.value.trim();', ' if(!email||!email.includes("@")){emailEl.style.borderColor="var(--pink)";return;}', ' var prompt=document.getElementById("badgePrompt");', ' if(prompt)prompt.innerHTML="Sending your badge...";', ' fetch(INDEX_URL+"/badge-request",{', ' method:"POST",', ' headers:{"Content-Type":"application/json"},', ' body:JSON.stringify({email:email,domain:domain,business_name:bizName,category:category,aro_score:score})', ' }).then(function(r){return r.json();}).then(function(d){', ' if(prompt){', ' if(d.ok){prompt.innerHTML="Badge sent! Check your inbox. 🏆";}', ' else{prompt.innerHTML="Something went wrong. Email therese@tagmakessc.com";}', ' }', ' }).catch(function(){', ' if(prompt)prompt.innerHTML="Something went wrong. Email therese@tagmakessc.com";', ' });', '}', 'function maybeShowOutsideRow(allRows,tbody){', ' var domain=window._searchDomain;if(!domain)return;', ' var inTop10=allRows.slice(0,10).some(function(b){return(b.primary_domain||"").toLowerCase().includes(domain);});', ' if(inTop10)return;', ' var match=null;var pos=0;', ' allRows.forEach(function(b,i){if(!match&&((b.primary_domain||"").toLowerCase().includes(domain)||(b.business_name||"").toLowerCase().includes(domain))){match=b;pos=i+1;}});', ' if(!match)return;', ' var sepRow=document.createElement("tr");var sepTd=document.createElement("td");', ' sepTd.colSpan=agencyUnlocked?6:5;sepTd.className="outside-label";', ' sepTd.textContent="Your business - ranked #"+pos+" in this category";', ' sepRow.appendChild(sepTd);tbody.appendChild(sepRow);', ' tbody.appendChild(buildRow(match,true,false,""));', '}', 'function handleSearch(){', ' var raw=document.getElementById("searchInput").value.trim().toLowerCase().replace(/^https?:\\/\\//,"").replace(/\\/$/,"");', ' if(!raw)return;', ' showGlitch("Searching...");window._searchDomain=raw;', ' var result=document.getElementById("searchResult");result.className="search-result";', ' setTimeout(function(){', ' var found=null;var foundInd=null;var foundPos=null;', ' Object.keys(allData).forEach(function(ind){', ' if(found)return;', ' var sorted=allData[ind].slice().sort(function(a,b){return(b.ranking_score||0)-(a.ranking_score||0);});', ' sorted.forEach(function(b,i){if(!found&&((b.primary_domain||"").toLowerCase().includes(raw)||(b.business_name||"").toLowerCase().includes(raw))){found=b;foundInd=ind;foundPos=i+1;}});', ' });', ' hideGlitch();', ' setTimeout(function(){', ' result.className="search-result show";', ' if(!found){', ' result.innerHTML="
We do not have "+escH(raw)+" in the "+escH(MARKET_NAME)+" ARO Index yet. Run a free audit to get added.
";', ' return;', ' }', ' var inTop10=foundPos<=10;', ' result.innerHTML="
"+escH(found.business_name||"")+""+escH(found.primary_domain||"")+"
Ranked #"+foundPos+" in "+escH(foundInd)+"  |  Index Score: "+(Math.round((found.ranking_score||0)*10)/10)+"  |  ARO Score: "+(found.aro_score||0)+""+(inTop10?"  |  In Top 10":"")+"
";', ' selectIndustry(foundInd);', ' if(!inTop10){setTimeout(function(){var sorted=allData[foundInd].slice().sort(function(a,b){return(b.ranking_score||0)-(a.ranking_score||0);});maybeShowOutsideRow(sorted,document.getElementById("lbBody"));},150);}', ' },350);', ' },800);', '}', 'document.getElementById("searchBtn").addEventListener("click",handleSearch);', 'document.getElementById("searchInput").addEventListener("keydown",function(e){if(e.key==="Enter")handleSearch();});', 'document.getElementById("agencyHeader").addEventListener("click",function(){', ' var body=document.getElementById("agencyBody");', ' var chevron=document.getElementById("agencyChevron");', ' var header=document.getElementById("agencyHeader");', ' var isOpen=body.classList.contains("open");', ' body.classList.toggle("open",!isOpen);chevron.classList.toggle("open",!isOpen);header.classList.toggle("open",!isOpen);', '});', 'document.getElementById("submitCodeBtn").addEventListener("click",function(){', ' var code=document.getElementById("codeInput").value.trim().toUpperCase();', ' var errEl=document.getElementById("codeError");', ' errEl.classList.remove("show");', ' fetch("' + PROXY_URL + '/admin/validate-code?code="+encodeURIComponent(code))', ' .then(function(r){return r.json();})', ' .then(function(d){', ' if(d.valid){', ' agencyUnlocked=true;currentAgencyCode=code;', ' document.getElementById("lockIcon").textContent="\\u2713";', ' document.getElementById("lockIcon").classList.add("unlocked");', ' document.getElementById("agencyFilters").classList.add("show");', ' document.getElementById("queryColHead").style.display="table-cell";', ' document.getElementById("codeSection").style.display="none";', ' document.getElementById("agencyHook").style.display="none";', ' if(activeIndustry)renderTable(activeIndustry,activeSubindustry);', ' } else {', ' errEl.classList.add("show");', ' }', ' }).catch(function(){errEl.classList.add("show");});', '});', 'document.getElementById("codeInput").addEventListener("keydown",function(e){if(e.key==="Enter")document.getElementById("submitCodeBtn").click();});', 'document.getElementById("agCatFilter").addEventListener("change",function(){', ' var cat=this.value;var subSelect=document.getElementById("agSubFilter");', ' subSelect.innerHTML="";', ' if(cat&&subData[cat]){Object.keys(subData[cat]).forEach(function(s){var opt=document.createElement("option");opt.value=s;opt.textContent=s;subSelect.appendChild(opt);});selectIndustry(cat);}', '});', 'document.getElementById("agSubFilter").addEventListener("change",function(){if(activeIndustry)selectSub(this.value||null);});', 'document.getElementById("agSortFilter").addEventListener("change",function(){if(activeIndustry)renderTable(activeIndustry,activeSubindustry);});', 'if(agencyUnlocked){', ' document.getElementById("lockIcon").textContent="\\u2713";', ' document.getElementById("lockIcon").classList.add("unlocked");', ' document.getElementById("agencyFilters").classList.add("show");', ' document.getElementById("queryColHead").style.display="table-cell";', ' document.getElementById("codeSection").style.display="none";', ' document.getElementById("agencyHook").style.display="none";', '}', 'document.querySelectorAll(".faq-q").forEach(function(btn){', ' btn.addEventListener("click",function(){', ' var idx=btn.getAttribute("data-faq");', ' var answer=document.getElementById("faq-a-"+idx);', ' var isOpen=answer.classList.contains("open");', ' document.querySelectorAll(".faq-a").forEach(function(a){a.classList.remove("open");});', ' document.querySelectorAll(".faq-q").forEach(function(q){q.classList.remove("open");});', ' if(!isOpen){answer.classList.add("open");btn.classList.add("open");}', ' });', '});', 'function fmtDate(d){if(!d)return"N/A";return new Date(d).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"});}', 'function escH(str){return String(str).replace(/&/g,"&").replace(//g,">").replace(/"/g,""");}', // Default top 5 on page load '(function(){', ' var all=[];', ' Object.keys(allData).forEach(function(ind){', ' allData[ind].forEach(function(b){all.push(b);});', ' });', ' all.sort(function(a,b){return(b.ranking_score||0)-(a.ranking_score||0);});', ' var top5=all.slice(0,5);', ' if(top5.length>0){', ' var lbSection=document.getElementById("lbSection");', ' var tbody=document.getElementById("lbBody");', ' var title=document.getElementById("lbTitle");', ' if(lbSection&&tbody&&title){', ' lbSection.style.display="block";', ' title.textContent="Top Ranked - All Industries";', ' tbody.innerHTML="";', ' var labelRow=document.createElement("tr");', ' var labelTd=document.createElement("td");', ' labelTd.colSpan=5;labelTd.className="top10-label";', ' labelTd.textContent="Top Ranked - All Industries";', ' labelRow.appendChild(labelTd);tbody.appendChild(labelRow);', ' top5.forEach(function(b){tbody.appendChild(buildRow(b,false,false,""));});', ' }', ' }', '})();', 'window.selectIndustry=selectIndustry;', 'window.selectSub=selectSub;', '})();' ].join('\n'); const css = [ ':root{--pink:#E92A97;--teal:#71C9CB;--bg:#0a0a0a;--card:#111111;--card2:#0f0f0f;--border:#222222;--border2:#2a2a2a;--text:#f5f3ef;--muted:#7a7670;--soft:#444440;}', '*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}', 'html,body{background:var(--bg);color:var(--text);font-family:"DM Sans",sans-serif;line-height:1.5;min-height:100vh;}', '#glitch-modal{position:fixed;inset:0;z-index:9999;pointer-events:none;display:flex;align-items:center;justify-content:center;background:rgba(10,10,10,0.85);opacity:0;transition:opacity 0.25s ease;}', '#glitch-modal.visible{opacity:1;}#glitch-modal.fading{opacity:0;}', '.glitch-card{width:100%;max-width:100vw;min-height:180px;background:rgba(10,10,10,0.97);border-top:1px solid #2a2a2a;border-bottom:1px solid #2a2a2a;padding:48px 60px;text-align:center;position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;}', '.glitch-card::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent,transparent 3px,rgba(113,201,203,0.03) 3px,rgba(113,201,203,0.03) 4px);pointer-events:none;}', '.glitch-eyebrow{font-family:"Space Mono",monospace;font-size:10px;text-transform:uppercase;letter-spacing:0.25em;color:var(--teal);margin-bottom:16px;}', '.glitch-label{font-family:"Cormorant Garamond",serif;font-weight:300;font-size:4rem;color:var(--text);white-space:nowrap;animation:glitch-text-loop 0.8s steps(1) infinite;}', '.glitch-dots{font-family:"Space Mono",monospace;font-size:12px;color:var(--muted);margin-top:16px;letter-spacing:0.2em;animation:dots-pulse 1.2s ease infinite;}', '@keyframes glitch-text-loop{0%{text-shadow:none;transform:translateX(0);color:var(--text);}15%{text-shadow:-2px 0 var(--pink),2px 0 var(--teal);transform:translateX(2px);}30%{text-shadow:2px 0 var(--pink),-2px 0 var(--teal);transform:translateX(-1px);}45%{text-shadow:none;transform:translateX(0);}60%{text-shadow:-1px 0 var(--teal);transform:translateX(1px);}75%{text-shadow:none;transform:translateX(0);}90%{text-shadow:1px 0 var(--pink);transform:translateX(-1px);}100%{text-shadow:none;transform:translateX(0);}}', '@keyframes dots-pulse{0%,100%{opacity:0.4;}50%{opacity:1;}}', '.topbar{display:flex;align-items:center;justify-content:space-between;padding:20px 40px;border-bottom:1px solid var(--border);flex-wrap:wrap;gap:12px;}', '.topbar-left{display:flex;align-items:center;gap:16px;}', '.logo-link img{height:36px;width:auto;display:block;}', '.topbar-divider{width:1px;height:20px;background:var(--border2);}', '.topbar-label{font-size:11px;color:var(--muted);line-height:1.6;}', '.topbar-label strong{display:block;color:var(--text);font-size:14px;font-weight:600;}', '.topbar-right{font-family:"Space Mono",monospace;font-size:12px;color:var(--soft);letter-spacing:0.08em;}', '.market-nav{display:flex;gap:12px;flex-wrap:wrap;padding:15px 30px 0;}', '.market-pill{padding:6px 12px;border-radius:999px;font-size:15px;font-weight:500;text-decoration:none;border:1.5px solid var(--border2);color:var(--muted);background:transparent;transition:all 0.2s;}', '.market-pill:hover{border-color:var(--text);color:var(--text);}', '.market-pill.active{background:var(--text);border-color:var(--text);color:var(--bg);}', '.wrap{max-width:1100px;margin:0 auto;padding:36px 40px 80px;}', '.hero{padding:56px 0 30px;}', '.eyebrow{font-family:"Space Mono",monospace;font-size:11px;text-transform:uppercase;letter-spacing:0.18em;color:var(--teal);font-weight:700;margin-bottom:16px;}', '.hero h1{font-family:"Cormorant Garamond",serif;font-weight:500;font-size:clamp(1.7rem,4.5vw,5rem);line-height:1.05;color:#f5f3ef;margin-bottom:10px;white-space:nowrap;}', '.hero h1 em{font-style:italic;color:var(--pink);}', '.hero h2{font-family:"DM Sans",sans-serif;font-weight:700;font-size:1.5rem;line-height:1.3;color:#f0eeea;margin-bottom:20px;max-width:780px;}', '.hero p{font-size:18px;color:#d8d4ce;max-width:700px;line-height:1.85;margin-bottom:10px;}', '.hero-fact{font-size:16px;color:#b8b4ae;max-width:560px;line-height:1.7;margin-top:6px;font-family:"Space Mono",monospace;}', '.stats-bar{display:grid;grid-template-columns:repeat(3,1fr);background:var(--card);border:1px solid var(--border);border-radius:10px;overflow:hidden;margin-bottom:32px;}', '.stat-cell{padding:22px 28px;border-right:1px solid var(--border);position:relative;cursor:default;}', '.stat-cell:last-child{border-right:none;}', '.stat-label{font-family:"Space Mono",monospace;font-size:12px;text-transform:uppercase;letter-spacing:0.12em;color:var(--muted);font-weight:700;margin-bottom:8px;}', '.stat-value{font-family:"Nunito Sans",sans-serif;font-size:2.4rem;font-weight:800;color:var(--text);margin-bottom:4px;line-height:1;letter-spacing:-0.02em;}', '.stat-sub{font-size:12px;color:var(--soft);}', '.stat-tip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:#1a1a1a;border:1px solid var(--border2);border-radius:8px;padding:10px 14px;font-size:12px;color:var(--muted);max-width:240px;white-space:normal;line-height:1.6;opacity:0;transition:opacity 0.2s;pointer-events:none;z-index:100;}', '.stat-tip.visible{opacity:1;}', '.search-wrap{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:22px 28px;margin-bottom:28px;}', '.search-label{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--muted);margin-bottom:12px;font-family:"Space Mono",monospace;display:block;}', '.search-row{display:flex;gap:10px;}', '.search-input{flex:1;padding:14px 16px;border:1px solid rgba(113,201,203,0.4);border-radius:8px;font-family:"DM Sans",sans-serif;font-size:16px;color:var(--text);background:#2a2a2a;outline:none;transition:border 0.2s,box-shadow 0.2s;}', '.search-input:focus{border-color:var(--teal);box-shadow:0 0 0 2px rgba(113,201,203,0.25);}', '.search-input::placeholder{color:#888;font-size:16px;}', '.search-btn{padding:14px 28px;background:var(--pink);color:#fff;border:none;border-radius:8px;font-weight:700;font-size:15px;cursor:pointer;transition:all 0.2s;}', '.search-btn:hover{background:#c4157e;color:#fff;}', '.search-result{margin-top:14px;display:none;}', '.search-result.show{display:block;}', '.search-hit{background:var(--card2);border:1px solid var(--teal);border-radius:8px;padding:16px 20px;}', '.search-miss{background:var(--card2);border:1px solid var(--border2);border-radius:8px;padding:16px 20px;font-size:14px;color:var(--muted);}', '.section-label{font-family:"Space Mono",monospace;font-size:11px;text-transform:uppercase;letter-spacing:0.18em;color:#f5f3ef;font-weight:700;margin-bottom:14px;}', '.cmd-select{position:relative;margin-bottom:16px;}', '.cmd-select-label{font-family:"Space Mono",monospace;font-size:12px;text-transform:uppercase;letter-spacing:0.18em;color:var(--muted);font-weight:700;margin-bottom:6px;display:block;}', '.cmd-select-input-wrap{position:relative;display:flex;align-items:center;}', '.cmd-select-prompt{position:absolute;left:14px;font-family:"Space Mono",monospace;font-size:13px;color:var(--teal);pointer-events:none;z-index:2;}', '.cmd-select-input{width:100%;background:var(--card2);border:1px solid var(--border2);border-radius:8px;padding:11px 16px 11px 36px;font-family:"Space Mono",monospace;font-size:13px;color:var(--text);outline:none;transition:border-color 0.2s;caret-color:var(--teal);}', '.cmd-select-input::placeholder{color:var(--soft);font-family:"Space Mono",monospace;}', '.cmd-select-input:focus{border-color:var(--teal);}', '.cmd-select-active{display:none;position:absolute;right:10px;top:50%;transform:translateY(-50%);background:rgba(113,201,203,0.15);color:var(--teal);font-family:"Space Mono",monospace;font-size:11px;font-weight:700;padding:3px 8px;border-radius:4px;cursor:pointer;border:1px solid rgba(113,201,203,0.3);z-index:2;gap:6px;align-items:center;letter-spacing:0.04em;}', '.cmd-select-active.show{display:inline-flex;}', '.cmd-select-active:hover{background:rgba(113,201,203,0.25);}', '.cmd-select-x{opacity:0.6;margin-left:4px;font-size:13px;}', '.cmd-dropdown{display:none;position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--card2);border:1px solid var(--border2);border-radius:8px;max-height:260px;overflow-y:auto;z-index:100;box-shadow:0 8px 32px rgba(0,0,0,0.6);}', '.cmd-dropdown.open{display:block;}', '.cmd-dropdown-item{padding:9px 16px;font-family:"DM Sans",sans-serif;font-size:14px;color:rgba(245,243,239,0.7);cursor:pointer;display:flex;align-items:center;justify-content:space-between;transition:background 0.1s;border-bottom:1px solid rgba(255,255,255,0.03);}', '.cmd-dropdown-item:last-child{border-bottom:none;}', '.cmd-dropdown-item:hover,.cmd-dropdown-item.hl{background:rgba(245,243,239,0.06);color:var(--text);}', '.cmd-dropdown-count{font-family:"Space Mono",monospace;font-size:12px;color:var(--soft);}', '.cmd-dropdown-item:hover .cmd-dropdown-count,.cmd-dropdown-item.hl .cmd-dropdown-count{color:var(--teal);}', '.cmd-dropdown-empty{padding:14px 16px;font-size:13px;color:var(--soft);text-align:center;font-family:"Space Mono",monospace;}', '.cmd-dropdown::-webkit-scrollbar{width:6px;}', '.cmd-dropdown::-webkit-scrollbar-track{background:transparent;}', '.cmd-dropdown::-webkit-scrollbar-thumb{background:var(--border2);border-radius:3px;}', '.pills-wrap{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px;}', '.pill.sub{font-size:14px;padding:8px 20px;border-radius:999px;cursor:pointer;border:1px solid rgba(245,243,239,0.3);color:rgba(245,243,239,0.7);background:transparent;transition:all 0.18s;font-weight:400;}', '.pill.sub:hover{border-color:rgba(245,243,239,0.7);color:#f5f3ef;}', '.pill.sub.active{background:rgba(113,201,203,0.2);border:1px solid #71C9CB;color:#71C9CB;font-weight:600;box-shadow:0 0 8px rgba(113,201,203,0.3);}', '.lb-section{background:var(--card);border:1px solid var(--border);border-radius:12px;overflow:hidden;margin-bottom:12px;display:none;}', '.lb-header{padding:28px 28px 0;}', '.lb-header h2{font-family:"Cormorant Garamond",serif;font-weight:300;font-size:1.8rem;margin-bottom:6px;color:var(--text);}', '.lb-header .sub{font-size:13px;color:var(--muted);margin-bottom:20px;}', '.lb-wrap{overflow-x:auto;}', 'table{width:100%;border-collapse:collapse;}', 'thead th{background:var(--card2);padding:10px 18px;font-size:12px;text-transform:uppercase;letter-spacing:0.1em;color:var(--muted);font-weight:700;border-bottom:1px solid var(--border);text-align:left;white-space:nowrap;font-family:"Space Mono",monospace;}', 'tbody td{padding:16px 18px;border-bottom:1px solid var(--border);font-size:15px;vertical-align:middle;color:#e8e4de;}', 'tbody tr:last-child td{border-bottom:none;}', 'tbody tr:hover td{background:rgba(255,255,255,0.02);}', 'tbody tr.highlighted td{background:rgba(233,42,151,0.06);border-left:2px solid var(--pink);}', 'tbody tr.rank-one-row td{background:rgba(113,201,203,0.04);}', // ── UPDATED: Nunito Sans for all table data cells ── '.biz-name{font-family:"Nunito Sans",sans-serif;font-weight:800;color:#f5f3ef;display:block;font-size:20px;letter-spacing:-0.01em;}', '.biz-domain{font-family:"Nunito Sans",sans-serif;font-size:12px;color:#888480;display:block;margin-top:4px;font-weight:400;}', '.index-pill{display:inline-flex;align-items:center;justify-content:center;background:rgba(113,201,203,0.15);color:var(--teal);border-radius:6px;padding:6px 14px;font-family:"Nunito Sans",sans-serif;font-size:1.5rem;font-weight:800;min-width:60px;border:1px solid rgba(113,201,203,0.3);}', '.aro-score{font-family:"Nunito Sans",sans-serif;font-size:14px;color:#c0bcb6;font-weight:800;}', '.models-val{font-family:"Nunito Sans",sans-serif;font-size:15px;color:#c0bcb6;font-weight:800;}', '.models-val.full{color:var(--teal);font-weight:900;}', // ────────────────────────────────────────────────── '.date-cell{font-family:"Space Mono",monospace;font-size:12px;color:var(--soft);}', '.query-live{font-family:"Space Mono",monospace;font-size:12px;color:var(--teal);}', '.top10-label{font-family:"Space Mono",monospace;font-size:12px;text-transform:uppercase;letter-spacing:0.12em;color:var(--soft);font-weight:700;padding:8px 18px;background:var(--card2);border-bottom:1px solid var(--border);}', '.outside-label{font-family:"Space Mono",monospace;font-size:12px;text-transform:uppercase;letter-spacing:0.12em;color:var(--pink);font-weight:700;padding:8px 18px;background:rgba(233,42,151,0.05);border-top:1px dashed var(--pink);}', '.empty-state{padding:48px 28px;text-align:center;color:var(--muted);font-size:14px;}', '.empty-state a{color:var(--pink);text-decoration:none;font-weight:600;}', '.row-audit-btn{display:inline-block;padding:6px 14px;background:var(--pink);border:none;color:#fff;border-radius:6px;font-size:12px;font-weight:700;text-decoration:none;white-space:nowrap;transition:all 0.2s;font-family:"DM Sans",sans-serif;letter-spacing:0.02em;}', '.row-audit-btn:hover{background:#c4157e;box-shadow:0 0 16px rgba(233,42,151,0.55);transform:translateY(-1px);}', '.badge-prompt{margin-top:6px;}', '.badge-q{font-size:12px;font-weight:700;color:var(--teal);}', '.badge-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px;}', '.badge-yes{padding:6px 14px;background:transparent;border:1px solid var(--teal);color:var(--teal);border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;font-family:"DM Sans",sans-serif;transition:all 0.18s;}', '.badge-yes:hover{background:var(--teal);color:var(--bg);}', '.badge-no{padding:6px 14px;background:var(--teal);border:1px solid var(--teal);color:var(--bg);border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;font-family:"DM Sans",sans-serif;transition:all 0.18s;}', '.badge-no:hover{background:#50b5b7;}', '.badge-email-form{display:flex;gap:8px;flex-wrap:wrap;}', '.badge-input{flex:1;min-width:160px;padding:6px 12px;border:1px solid var(--border2);border-radius:6px;font-size:13px;color:var(--text);background:var(--bg);outline:none;font-family:"DM Sans",sans-serif;}', '.badge-input:focus{border-color:var(--teal);}', '.badge-submit{padding:6px 14px;background:var(--pink);border:none;color:#fff;border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;font-family:"DM Sans",sans-serif;transition:background 0.18s;}', '.badge-submit:hover{background:#c4157e;}', '.how-one-liner{padding:16px 20px;background:rgba(113,201,203,0.05);border:1px solid rgba(113,201,203,0.15);border-radius:8px;font-size:13px;color:var(--muted);line-height:1.7;margin-bottom:28px;}', '.how-one-liner strong{color:var(--teal);}', '.agency-hook{display:none;border-radius:12px;padding:36px 40px;margin-bottom:20px;position:relative;overflow:hidden;background:linear-gradient(135deg,rgba(233,42,151,0.08) 0%,rgba(113,201,203,0.08) 100%);border:1px solid rgba(233,42,151,0.3);box-shadow:0 0 40px rgba(233,42,151,0.1),0 0 80px rgba(113,201,203,0.05);}', '.agency-hook::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,var(--pink),var(--teal));}', '.agency-hook-eyebrow{font-family:"Space Mono",monospace;font-size:12px;text-transform:uppercase;letter-spacing:0.18em;color:var(--pink);font-weight:700;margin-bottom:14px;}', '.agency-hook h3{font-family:"Cormorant Garamond",serif;font-weight:400;font-size:2rem;color:#f5f3ef;margin-bottom:16px;line-height:1.2;}', '.agency-hook .hook-body{font-size:15px;color:#d0ccc6;line-height:1.85;margin-bottom:20px;max-width:680px;}', '.agency-hook .hook-list{list-style:none;padding:0;margin:0 0 24px;font-size:15px;color:#d0ccc6;line-height:2;}', '.agency-hook .hook-list li::before{content:"-> ";color:var(--teal);font-weight:700;}', '.agency-hook-btns{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:16px;}', '.see-more-toggle{background:none;border:none;color:var(--teal);font-size:12px;font-family:"Space Mono",monospace;cursor:pointer;padding:0;letter-spacing:0.08em;text-decoration:underline;text-underline-offset:3px;}', '.see-more-body{display:none;margin-top:20px;padding-top:20px;border-top:1px solid rgba(113,201,203,0.15);}', '.see-more-body.open{display:block;}', '.see-more-body p{font-size:14px;color:#b8b4ae;line-height:1.8;margin-bottom:12px;}', '.see-more-body p:last-child{margin-bottom:0;}', '.cta-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:28px;}', '.cta-card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:32px;transition:box-shadow 0.3s;}', '.cta-card:hover{box-shadow:0 0 30px rgba(113,201,203,0.12);}', '.cta-card.dark{background:var(--card2);border-color:rgba(233,42,151,0.3);box-shadow:0 0 32px rgba(233,42,151,0.08);}', '.cta-card.dark:hover{box-shadow:0 0 60px rgba(233,42,151,0.18);}', '.cta-card h3{font-family:"Cormorant Garamond",serif;font-weight:300;font-size:1.7rem;margin-bottom:10px;color:var(--text);line-height:1.2;}', '.cta-card p{font-size:13px;color:var(--muted);line-height:1.75;margin-bottom:20px;}', '.price-tag{font-family:"Nunito Sans",sans-serif;font-weight:900;font-size:2.8rem;color:var(--pink);margin-bottom:4px;line-height:1;text-shadow:0 0 30px rgba(233,42,151,0.4);}', '.price-note{font-size:12px;color:var(--soft);margin-bottom:18px;}', '.btn-pink{display:inline-block;text-decoration:none;background:var(--pink);color:#fff;padding:12px 26px;border-radius:8px;font-weight:700;font-size:13px;border:none;cursor:pointer;font-family:"DM Sans",sans-serif;transition:all 0.18s;}', '.btn-pink:hover{background:#c4157e;transform:translateY(-1px);}', '.btn-teal{display:inline-block;text-decoration:none;background:var(--teal);color:#0a0a0a;padding:12px 26px;border-radius:8px;font-weight:700;font-size:13px;border:none;cursor:pointer;font-family:"DM Sans",sans-serif;transition:all 0.18s;margin-right:12px;}', '.btn-teal:hover{background:#50b5b7;transform:translateY(-1px);}', '.agency-panel{background:var(--card);border:1px solid var(--border);border-radius:12px;overflow:hidden;margin-bottom:28px;}', '.agency-header{padding:22px 28px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;border-bottom:1px solid transparent;user-select:none;transition:background 0.15s;}', '.agency-header:hover{background:rgba(255,255,255,0.02);}', '.agency-header.open{border-bottom-color:var(--border);}', '.agency-header-left{display:flex;align-items:center;gap:14px;}', '.lock-icon{font-size:16px;color:var(--muted);transition:color 0.2s;}', '.lock-icon.unlocked{color:var(--teal);}', '.agency-title{font-weight:600;font-size:14px;color:var(--text);}', '.agency-sub{font-size:12px;color:var(--muted);margin-top:2px;}', '.chevron{color:var(--muted);transition:transform 0.2s;font-size:12px;}', '.chevron.open{transform:rotate(180deg);}', '.agency-body{display:none;padding:26px 28px;}', '.agency-body.open{display:block;}', '.agency-unlocked-filters{display:none;margin-top:18px;}', '.agency-unlocked-filters.show{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}', '.filter-group label{font-size:12px;text-transform:uppercase;letter-spacing:0.1em;color:var(--muted);font-weight:700;display:block;margin-bottom:8px;font-family:"Space Mono",monospace;}', '.filter-select{width:100%;padding:9px 12px;border:1px solid var(--border2);border-radius:8px;font-family:"DM Sans",sans-serif;font-size:13px;color:var(--text);background:var(--card2);cursor:pointer;}', '.code-row{display:flex;gap:10px;}', '.code-input{flex:1;padding:11px 16px;border:1px solid var(--border2);border-radius:8px;font-family:"Space Mono",monospace;font-size:13px;color:var(--text);background:var(--bg);outline:none;text-transform:uppercase;transition:border 0.2s;}', '.code-input:focus{border-color:var(--teal);}', '.code-error{font-size:12px;color:var(--pink);margin-top:8px;display:none;}', '.code-error.show{display:block;}', '.faq-section{background:var(--card);border:1px solid var(--border);border-radius:12px;overflow:hidden;margin-bottom:28px;}', '.faq-header{padding:28px 28px 0;}', '.faq-header h2{font-family:"Cormorant Garamond",serif;font-weight:300;font-size:1.8rem;margin-bottom:6px;color:var(--text);}', '.faq-header p{font-size:13px;color:var(--muted);margin-bottom:22px;}', '.faq-item{border-top:1px solid var(--border);}', '.faq-q{width:100%;text-align:left;padding:20px 28px;background:none;border:none;font-family:"DM Sans",sans-serif;font-size:15px;font-weight:500;color:var(--text);cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:12px;transition:background 0.15s;}', '.faq-q:hover{background:rgba(255,255,255,0.02);}', '.faq-icon{color:var(--teal);font-size:20px;flex-shrink:0;transition:transform 0.2s;line-height:1;}', '.faq-q.open .faq-icon{transform:rotate(45deg);}', '.faq-a{max-height:0;overflow:hidden;transition:max-height 0.35s ease;font-size:14px;color:var(--muted);line-height:1.8;}', '.faq-a.open{max-height:400px;}', '.faq-a-inner{padding:0 28px 24px;}', 'footer{border-top:1px solid var(--border);padding:28px 40px;text-align:center;font-size:12px;color:var(--soft);}', 'footer a{color:var(--muted);text-decoration:none;}', 'footer a:hover{color:var(--teal);}', '.fade-in{animation:fadeIn 0.3s ease forwards;}', '@keyframes fadeIn{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:translateY(0);}}', '@media(max-width:768px){', '.topbar{padding:16px 20px;}.market-nav{padding:16px 20px 0;}.wrap{padding:24px 20px 60px;}', '.cta-grid{grid-template-columns:1fr;}.agency-unlocked-filters.show{grid-template-columns:1fr;}', '.stats-bar{grid-template-columns:1fr;}', '.stat-cell{border-right:none;border-bottom:1px solid var(--border);}.stat-cell:last-child{border-bottom:none;}', '.badge-actions{flex-direction:column;}', 'footer{padding:24px 20px;}', '.agency-hook{padding:24px 20px;}.agency-hook h3{font-size:1.5rem;}', '.lb-header{padding:20px 16px 0;}.lb-wrap{-webkit-overflow-scrolling:touch;}', 'thead th,tbody td{padding:12px 10px;}', '}', '@media(max-width:480px){', '.hero h1{white-space:normal;font-size:clamp(1.8rem,8vw,3rem);}', '.topbar-right{display:none;}', '.market-nav{padding:12px 16px 0;}', '}', // Sidebar '.page-layout{display:flex;min-height:100vh;}', '.side-nav{width:220px;flex-shrink:0;position:sticky;top:0;height:100vh;overflow-y:auto;background:var(--bg);border-right:1px solid var(--border);padding:20px 0;z-index:50;}', '.side-nav-brand{font-family:"Space Mono",monospace;font-size:12px;color:var(--teal);letter-spacing:0.1em;text-transform:uppercase;padding:0 16px 16px;border-bottom:1px solid var(--border);}', '.side-nav-links{padding:12px 0;border-bottom:1px solid var(--border);}', '.side-nav-links a{display:block;padding:6px 16px;font-family:"DM Sans",sans-serif;font-size:13px;color:#aababa;text-decoration:none;transition:color 0.15s;}', '.side-nav-links a:hover{color:var(--teal);}', '.side-nav-links a.active{color:var(--teal);}', '.side-nav-section{padding:12px 16px 4px;font-family:"Space Mono",monospace;font-size:12px;text-transform:uppercase;letter-spacing:0.1em;color:#f5f3ef;font-weight:700;}', '.side-nav-market{display:block;padding:7px 16px;font-family:"DM Sans",sans-serif;font-size:14px;color:#aababa;text-decoration:none;border-left:3px solid transparent;transition:all 0.15s;}', '.side-nav-market:hover{color:#f5f3ef;background:rgba(255,255,255,0.02);}', '.side-nav-market.active{color:#fff;border-left-color:var(--pink);background:rgba(233,42,151,0.06);}', '.side-nav-industry{display:block;padding:5px 16px;font-family:"DM Sans",sans-serif;font-size:13px;color:#aababa;text-decoration:none;cursor:pointer;transition:color 0.15s;}', '.side-nav-industry:hover{color:var(--teal);}', '.side-nav-industry.active{color:var(--teal);font-weight:600;}', '.side-nav-sub{display:block;padding:4px 16px 4px 28px;font-family:"DM Sans",sans-serif;font-size:12px;color:#aababa;text-decoration:none;cursor:pointer;transition:color 0.15s;}', '.side-nav-sub:hover{color:var(--teal);}', '.side-nav-sub.active{color:var(--teal);font-weight:600;}', '.page-main{flex:1;min-width:0;}', // Mobile hamburger for sidebar '.mobile-menu-btn{display:none;background:none;border:none;cursor:pointer;font-family:"Space Mono",monospace;font-size:12px;color:var(--teal);letter-spacing:0.08em;align-items:center;gap:8px;padding:8px 16px;}', '#mobile-nav-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:998;}', '@media(max-width:768px){', '.side-nav{display:none;position:fixed;top:0;left:-220px;height:100vh;z-index:999;transition:left 0.25s ease;}', '.side-nav.open{display:block;left:0;}', '.mobile-menu-btn{display:flex;}', '.page-layout{display:block;}', '}' ].join(''); return '\n\n\n' + '\n' + '\n' + 'ARO Index - ' + esc(marketName) + ' | TaG Makes\n' + '\n' + '\n' + '\n' + '\n' + // Nunito Sans weight 400/700/800/900 loaded '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n' + '\n\n' + '
ARO Index
Loading
analyzing . . .
\n' + '
\n' + '
\n' + // Sidebar '\n' + // Main content '
\n' + '
' + '' + 'TaG Makes logo' + '
' + '
ARO Index™Powered by ARO Score™ methodology by TaG Makes
' + '
aroindex.com
\n' + '
\n' + '
\n' + '
AI Recommendation Rankings
\n' + '

ARO Index ' + esc(marketName) + '

\n' + '

AI is recommending these businesses.
Is yours on the list?

\n' + '
\n' + '
' + 'Agency? We don\'t sell retainers or web services. We supply the data - you own the strategy and the client relationship. ' + 'See partner pricing →' + '
\n' + '
\n' + '\n' + '
\n' + '>_\n' + '\n' + '\n' + '
\n' + '
\n' + '
\n' + '\n' + '
\n' + '\n' + '
\n' + '
\n' + '
\n' + '
\n' + '

Top AI Recommended

' + '
Ranked by ARO Index Score. Weighted by recommendation rate, model agreement, and audit recency.
\n' + '
\n' + '' + '' + '' + '' + '' + '' + '' + '\n' + '\n' + '
BusinessIndex ScoreARO ScoreAIs AgreeGet Started
Select an industry above to see rankings.
\n' + '
\n' + '\n' + '
\n' + '
For agencies
\n' + '

White-label AI recommendation data for your agency

\n' + '

The ARO Index tracks which businesses AI platforms recommend. Agency access gives you this data for every client, under your brand.

\n' + '

We don\'t sell retainers or web services. We supply the data - you own the strategy and the client relationship.

\n' + '

Agency access includes:

\n' + '
  • query-level detail for every audit
  • competitive rankings by category
  • white-label reports under your brand
\n' + '\n' + '\n' + '
\n' + '

Agency access unlocks exact queries tested on each AI platform, complete audit history per client, category-level competitive rankings, and client-level ARO scores across ChatGPT, Claude, Gemini, and Perplexity.

\n' + '

White-label ready. Your brand, your clients, your data. The ARO Index becomes a tool you own the conversation with.

\n' + '

This is not a report. This is the data layer that makes you irreplaceable.

\n' + '
\n' + '
\n' + '
\n' + '
' + '
Free audit
' + '

See where you stand

' + '

Find out how visible your business is inside AI platforms and what is keeping you off the recommendation list.

' + 'Get your free ARO Score' + '
\n' + '
' + '
Action plan
' + '
$47
' + '
one-time, delivered in 24 hours
' + '

A custom fix plan built from your audit results. Specific, prioritized, plain language. No fluff.

' + 'Buy your fix plan' + '
\n' + '
\n' + '
\n' + '
\n' + '
🔒' + '
Agency Access
Unlock query data, client filtering, and full audit detail
\n' + '\n' + '
\n' + '
\n' + '
\n' + '

Enter your agency access code to unlock category filters, query data, and full audit detail.

\n' + '
\n' + '
Invalid access code. Contact Therese at therese@tagmakessc.com to get set up.
\n' + '

No code? Learn about agency partnerships

\n' + '
\n' + '
\n' + '
\n' + '
\n' + '
\n' + '
\n' + '
\n' + '
\n' + // STATS BAR — always visible, above FAQ, below all content '
\n' + '
' + '
Audits Run
' + '
' + (auditCount > 0 ? auditCount.toLocaleString() : totalBusinesses.toLocaleString()) + '
' + '
all time, all markets
\n' + '
' + '
Categories
' + totalCategories + '
industries ranked
\n' + '
' + '
AI Platforms
4
ChatGPT, Claude, Gemini, Perplexity
\n' + '
\n' + '
\n' + '
How it works
' + '

The methodology behind the rankings

' + '

Real questions. Straight answers.

\n' + faqHtml + '
\n' + '
\n' + '\n' + '\n' + '\n' + // Sidebar industry population '\n' + '
\n
\n' + // close page-main and page-layout '\n'; }